package cn.edu.wynu.arraylist;

import java.util.ArrayList;

/**
    案例:掌握从集合容器中找数据并删除的技巧。
    需求:现在假如购物车中存储了如下这些商品:
    Java入门，宁夏枸杞，黑枸杞，人字拖，特级枸杞，枸杞子。
    现在用户不想买枸杞了，选择了批量删除，请完成该需求。

    list.add("Java入门");
    list.add("宁夏枸杞");
    list.add("黑枸杞");
    list.add("人字拖”);
    list.add("特级枸杞");
    list.add("枸杞子");
*/
public class ArrayListTest02 {
    public static void main(String[] args) {
        // 1、创建一个ArrayList集合对象表示购物车，存储这些商品名。
        ArrayList<String> list = new ArrayList<>();
        list.add("枸杞");
        list.add("Java入门");
        list.add("宁夏枸杞");
        list.add("黑枸杞");
        list.add("人字拖");
        list.add("特级枸杞");
        list.add("枸杞子");
        System.out.println(list); // [Java入门, 宁夏枸杞, 黑枸杞, 人字拖, 特级枸杞, 枸杞子]

        // 2、遍历集合中的每个数据，只要这个数据包含了“枸杞”则删除它。
        /* 因为在删除数据后，数组的索引值会变化，所以输出数组错误。
        for (int i = 0; i < list.size(); i++) {
            // i = 0,1,2,3,4,5
            // 取出当前遍历到的数据
            String ele = list.get(i);
            // 判定这个数据中是否包含“枸杞”
            if (ele.contains("枸杞")){
                // 直接从集合中删除当前数据
                list.remove(ele);
            }
        }
        System.out.println(list); // [Java入门, 黑枸杞, 人字拖, 枸杞子]
        */

        /*
        // 解决办法一：每次删除一个数据后，就让i往左退一步
        for (int i = 0; i < list.size(); i++) {
            // i = 0,1,2,3,4,5
            // 取出当前遍历到的数据
            String ele = list.get(i);
            // 判定这个数据中是否包含“枸杞”
            if (ele.contains("枸杞")){
                // 直接从集合中删除当前数据
                list.remove(ele);
                i--; // 让i往左退一步
            }
        }
        System.out.println(list); // [Java入门, 人字拖]
        */

        // 解决办法二：从集合的后面倒着遍历并删除
        for (int i = list.size() - 1; i >= 0 ; i--) {
            // i = 5,4,3,2,1,0
            // 取出当前遍历到的数据
            String ele = list.get(i);
            // 判定这个数据中是否包含“枸杞”
            if (ele.contains("枸杞")){
                // 直接从集合中删除当前数据
                list.remove(ele);
            }
        }
        System.out.println(list);
    }
}
